//
// Created by dddgzc on 2025/2/1.
//

#ifndef BULLET_H
#define BULLET_H
#include "Vector2.h"
#include <functional>
#include "Camera.h"
#include <SDL.h>
#include "PlayerType.h"
#include "Atlas.h"
#include "Animation.h"

extern Camera camera;

/**
 * 子弹基类
 */
class Bullet {
public:
    Bullet() = default;
    ~Bullet() = default;

    void setDamage(int damage);
    int getDamage() const;
    void setPosition(float x, float y);
    Vector2& getPosition();
    Vector2& getSize();
    void setVelocity(float x, float y);
    void setCollideTarget(PlayerID id);
    PlayerID getCollideTarget() const;
    void setCallback(std::function<void()> callback);
    void setValid(bool flag);
    bool getValid() const;
    bool checkCanRemove() const;

    virtual void onCollide(); // 发生碰撞时
    virtual bool checkCollision(const Vector2& position, const Vector2& size); // 是否发生碰撞
    virtual void onUpdate(int delta);
    virtual void onDraw(const Camera& camera);
    bool checkIfExceedsScreen() const; // 检测子弹是否飞出屏幕
protected:
    Vector2 size; // 尺寸宽高
    Vector2 position; // 子弹位置
    Vector2 velocity; // 子弹速度
    int damage = 10; // 伤害
    bool valid = true; // 是否有效
    bool canRemove = false; // 是否可以被移除
    std::function<void()> callback; // 子弹碰撞后的回调函数
    PlayerID targetPlayerID; // 目标碰撞的ID
};



#endif //BULLET_H
